package com.ruoyi.util.reflect;

import java.lang.reflect.Field;

/**
 * @Author syc
 * @Date Created in 10:52 2022/8/9
 * @Description 通过反射获取字段和修改字段
 */
public class GetAndUpdateField {

    /**
     * @Author syc
     * @Date Created in 2022-08-09 10:56:16
     * @Description 通过反射机制访问一个java对象的属性:1.给属性赋值set,2.获取属性的值get
     */
    public static void getSet(){
        //使用反射机制给属性赋值
        Class<?> userClass = null;
        try {
            userClass = Class.forName("com.ruoyi.util.reflect.User");
            Object obj = userClass.newInstance();// obj就是User对象。（底层调用无参数构造方法）
            // 获取name属性（根据属性的名称来获取Field）
            Field noField = userClass.getDeclaredField("name");
            noField.setAccessible(true); // 设置允许访问 private 的字段
            System.out.println(noField.get(obj));
            // 给obj对象(user对象)的name属性赋值
            noField.set(obj, "韩天尊");
            // 读取属性的值
            // 两个要素：获取obj对象的name属性的值。
            System.out.println(noField.get(obj));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }

//    public static void main(String[] args) {
//        GetAndUpdateField.getSet();
//    }


}
